// MARK 基本实现
function throttle (fn) {
  let timer
  // 最后一次调用的时间戳（第一次可以理解为创建节流副本时的时间戳）
  let startTime = Date.now()
  return () => {
    // 当前事件戳
    let lastTime = Date.now()
    // 如果最后一次调用的时间戳减去当前时间戳大于需要间隔的毫秒数，则执行fn，并且更新最后一次调用的时间戳
    if (lastTime - startTime > 1000) {
      fn()
      startTime = lastTime
    }
  }
}

// MARK 首次执行
function throttleFirst (fn) {
  let timer
  let first = false
  let startTime = Date.now()
  return () => {
    if (!first) {
      fn()
      first = true
      return
    }
    // 当前事件戳
    let lastTime = Date.now()
    if (lastTime - startTime > 1000) {
      fn()
      startTime = lastTime
    }
  }
}

const fn = () => {
  console.log('执行')
}

const throttleFn = throttle(fn)

setInterval(throttleFn, 100)
